Dart SDK

我在工作中接触到 Dart 语言的底层实现,Dart 是一门非常强大的语言,这引起了我的兴趣,想将它研究清楚。

一段 Dart 源码字符串,是如何被一步步编译成字节码,并由 Runtime 执行的呢?在本文中,我将进行探索,来回答这个问题。

我们的旅程从 Dart SDK 的 Dart _fe_analyzer_shared 包开始。

Maeiee's Dart Adventures

This blog series explores the Dart SDK internals, guiding readers through its compiler framework and more.

This series, seen through Maeiee's eyes, provides practical tips and insights for both new and experienced developers. Join us to unlock Dart's potential and enhance your coding skills!

Series Link:Maeiee's Dart Adventures: Exploring the World of Dart SDK.

Subject

Black Magic:

七、编译器 or 静态分析器?

拿到抽象语法树之后,接着干啥呢?有两个可做之事:

在本文中,我选择编译器这一支,先继续分析编译器。等后面有时间了,再补上静态分析器的分支。

IncrementalCompiler

IncrementalCompiler 是 Dart SDK 中的一个类,专门用于实现 Dart 程序的增量编译。增量编译是一种编程技术,它能够仅重新编译自上次编译以来发生变化的部分代码,而不是重新编译整个程序。这样可以显著提高编译速度,特别是在开发过程中对于频繁修改的大型代码库来说尤其有用。

在 Dart SDK 的上下文中,IncrementalCompiler 类的作用是:

  1. 跟踪代码的更改:IncrementalCompiler 能够跟踪源代码文件的更改,以确定自上一次编译以来哪些文件被修改过。

  2. 重新编译更改的代码:IncrementalCompiler 会重新编译所有更改过的源代码文件,以及由于这些更改可能受到影响的其他代码。

  3. 生成更新的程序:它将这些重新编译的代码片段合并到已有的程序结构中,生成更新后的程序。

  4. 性能优化:通过这种方式,IncrementalCompiler 可以避免每次都从头开始编译整个程序,节约时间,提高开发效率。

这种编译方式在开发过程中特别重要,因为它允许开发者快速测试他们的更改,无需等待整个应用重新编译。这对于 Dart 平台上的 Flutter 应用开发尤为关键,因为它支持热重载(hot reload),即在应用运行时动态更新界面和逻辑,大幅提高开发效率。

敬请期待……

AbstractParserAstListener

ParserASTListener

getAST

generateKernelInternal

BenchmarkPhases 枚举,标记了 Build 的各个流程。

runWithFrontEndCompilerContext

Web Resources


本文作者:Maeiee

本文链接:Dart SDK

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!